package com.hue.concurrent.day06;

/**
 * volatile保证可见性和有序性的读写屏障
 */
public class Demo04 {
    private int num = 0;
    private volatile boolean flag = false;

    public void fun1(){
        num++;
        flag = true;
        /*
          此处产生写屏障:
            1.在写屏障之前对共享变量修改都会同步到主存中
            2.写屏障之前的代码不会被重排到写屏障之后
         */
    }

    public void fun2(){
        /*
            此处产生读屏障：
               1.在读屏障之后，对共享变量的读取，都会去主存中获取值
               2.读屏障之前的代码不会重排到读屏障之后
         */
        if(flag){
            num = 2;
        }else {
            num = 3;
        }
    }
}
